home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / c_text.zip / DRAW_S_B.ASM < prev    next >
Assembly Source File  |  1987-06-23  |  3KB  |  124 lines

  1. ;--------------------------------------------------------------------------;
  2. ; Draw_box(x,y,width,height,color) - All integers. Draws a WIDTH by HEIGHT ;
  3. ; box with the upper left corner at (x,y). COLOR is the color attribute.   ;
  4. ;--------------------------------------------------------------------------;
  5.  
  6. URIGHT          EQU     191
  7. ULEFT           EQU     218
  8. LRIGHT          EQU     217
  9. LLEFT           EQU     192
  10. HORIZONTAL      EQU     196
  11. VERTICAL        EQU     179
  12.  
  13. _TEXT   SEGMENT BYTE    PUBLIC  'CODE'
  14.         ASSUME  CS:_TEXT
  15.  
  16.         PUBLIC  _DRAW_S_BOX
  17. _DRAW_S_BOX       PROC    NEAR
  18.         PUSH    BP
  19.         MOV     BP,SP
  20.         PUSH    DI
  21.         PUSH    SI
  22.         PUSH    DS
  23.         PUSH    ES
  24.  
  25.         MOV     BL,[BP+12]              ;Color attribute
  26.         MOV     DH,[BP+4]               ;X
  27.         MOV     DL,[BP+6]               ;Y
  28.         CALL    GOTO_YZ
  29.         MOV     AL,ULEFT
  30.         MOV     CX,1                    ;Print 1 character
  31.  
  32.         CALL    PRINT_CH
  33.         INC     DL                      ;Next column over
  34.         CALL    GOTO_YZ
  35.         MOV     CX,[BP+8]               ;Width
  36.         SUB     CX,2                    ;corner + width-2 horizontal + corner
  37.         MOV     AL,HORIZONTAL           ;  equals WIDTH
  38.         CALL    PRINT_CH
  39.         MOV     DL,[BP+8]
  40.         ADD     DL,[BP+6]
  41.         DEC     DL
  42.         CALL    GOTO_YZ
  43.         MOV     CX,1
  44.         MOV     AL,URIGHT
  45.         CALL    PRINT_CH
  46.         MOV     CX,[BP+10]
  47.         SUB     CX,2
  48.         MOV     AL,VERTICAL
  49. DRAW_VERT:
  50.         PUSH    CX
  51.         MOV     CX,1
  52.         INC     DH
  53.         MOV     DL,[BP+6]
  54.         CALL    GOTO_YZ
  55.         CALL    PRINT_CH
  56.         ADD     DL,[BP+8]
  57.         DEC     DL
  58.         CALL    GOTO_YZ
  59.         CALL    PRINT_CH
  60.         POP     CX
  61.         LOOP    DRAW_VERT
  62.         INC     DH
  63.         MOV     DL,[BP+6]
  64.         CALL    GOTO_YZ
  65.         MOV     AL,LLEFT
  66.         MOV     CX,1
  67.         CALL    PRINT_CH
  68.         INC     DL
  69.         CALL    GOTO_YZ
  70.         MOV     CX,[BP+8]
  71.         SUB     CX,2
  72.         MOV     AL,HORIZONTAL
  73.         CALL    PRINT_CH
  74.         ADD     DL,[BP+8]
  75.         SUB     DL,2
  76.         CALL    GOTO_YZ
  77.         MOV     CX,1
  78.         MOV     AL,LRIGHT
  79.         CALL    PRINT_CH
  80.  
  81.         POP     ES
  82.         POP     DS
  83.         POP     SI
  84.         POP     DI
  85.         POP     BP
  86.         RET
  87. _DRAW_S_BOX       ENDP
  88.  
  89.  
  90.         PUBLIC  PRINT_CH
  91. PRINT_CH      PROC    NEAR
  92.         PUSH    AX
  93.         PUSH    BX
  94.  
  95.         MOV     AH,9                    ;Service 9, print character
  96.         MOV     BH,0                    ;Display page 0
  97.         INT     10h
  98.  
  99.         POP     BX
  100.         POP     AX
  101.         RET
  102. PRINT_CH      ENDP
  103.  
  104.  
  105.  
  106.         PUBLIC  GOTO_YZ
  107. GOTO_YZ     PROC    NEAR
  108.         PUSH    AX
  109.         PUSH    BX
  110.  
  111.  
  112.         MOV     AH,2                    ;Service 2, Move cursor
  113.         XOR     BH,BH                   ;Page 0
  114.         INT     10h
  115.  
  116.         POP     BX
  117.         POP     AX
  118.         RET
  119. GOTO_YZ ENDP
  120.  
  121. _TEXT   ENDS
  122.         END
  123.  
  124.